"""
该模块用于合并两个JSON文件，并查找它们之间的差异。

主要功能包括：
1. 读取JSON文件。
2. 合并两个JSON文件的内容。
3. 查找两个JSON文件之间的差异。

模块中的主要函数：
- read_json: 读取JSON文件。
- merge_json_files: 合并两个JSON文件的内容。
- find_differences: 查找两个JSON文件之间的差异。
- main: 主函数，执行合并和查找差异操作。
"""

import json
import os


def read_json(file_path):
    """
    读取JSON文件。

    参数:
        file_path (str): JSON文件路径。

    返回值:
        dict: 读取的JSON数据。
    """
    with open(file_path, "r", encoding="utf-8") as file:
        return json.load(file)


def merge_json_files(file1, file2, output_file):
    """
    合并两个JSON文件的内容。

    参数:
        file1 (str): 第一个JSON文件路径。
        file2 (str): 第二个JSON文件路径。
        output_file (str): 输出合并结果的文件路径。

    返回值:
        无
    """
    data1 = read_json(file1)
    data2 = read_json(file2)

    merged_data = {}

    for key in set(data1.keys()).union(data2.keys()):
        if key in data1 and key in data2:
            if data1[key] and data2[key]:
                merged_data[key] = (
                    data1[key] if len(data1[key]) >= len(data2[key]) else data2[key]
                )
            else:
                merged_data[key] = data1[key] if data1[key] else data2[key]
        elif key in data1:
            merged_data[key] = data1[key]
        else:
            merged_data[key] = data2[key]

    with open(output_file, "w", encoding="utf-8") as file:
        json.dump(merged_data, file, ensure_ascii=False, indent=4)


def find_differences(file1, file2):
    """
    查找两个JSON文件之间的差异。

    参数:
        file1 (str): 第一个JSON文件路径。
        file2 (str): 第二个JSON文件路径。

    返回值:
        set: 两个JSON文件之间的差异键集合。
    """
    data1 = read_json(file1)
    data2 = read_json(file2)

    keys1 = set(data1.keys())
    keys2 = set(data2.keys())

    diff_keys = keys1.symmetric_difference(keys2)

    return diff_keys


def main():
    """
    主函数，执行合并和查找差异操作。
    """
    file1 = r"S:\PythonProject\cnki-references-scrapy\main\scrapy_results\CNKI_20240816_test.json"
    file2 = r"S:\PythonProject\cnki-references-scrapy\main\scrapy_results\CNKI_20240817.json"
    output_file = "json_merged.json"

    merge_json_files(file1, file2, output_file)

    print(find_differences(file1, file2))


if __name__ == "__main__":
    main()
